/*
 * Copyright (c) 2018 Dell Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License. You may obtain
 * a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT
 * LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS
 * FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
 *
 * See the Apache Version 2.0 License for specific language governing
 * permissions and limitations under the License.
 */

/*
 * filename: std_bit_opts.h
 */


/**
 * @file std_bit_ops.h
 * @brief Common utility bit operations
 */

#ifndef __STD_BIT_OPTS_H_
#define __STD_BIT_OPTS_H_

/**
 * @defgroup BitOps Common - Bit operations
 * Set Bit, Clear Bit, Test Bit, Toggle Bit operations
 *
 * @{
 */

/**
 * @def STD_BIT_SET
 * Set specified 'bit' in 'bitfield'
 */
#define STD_BIT_SET(bitfield, bit)         (bitfield |= ( 1 << bit))

/**
 * @def STD_BIT_CLEAR
 * Clear specified 'bit' from 'bitfield'
 */
#define STD_BIT_CLEAR(bitfield, bit)       (bitfield &= ~(1 << bit))

/**
 * @def STD_BIT_TEST
 * Test if specified 'bit' is set in 'bitfield'
 */
#define STD_BIT_TEST(bitfield, bit)        (bitfield & (1 << bit))

/**
 * @def STD_BIT_TOGGLE
 * Toggle specified 'bit' in 'bitfield'
 */
#define STD_BIT_TOGGLE(bitfield, bit)      (bitfield ^= (1 << bit))

/**
 * @}
 */

#endif /* __STD_BIT_OPTS_H_ */
